// since JDK 1.0
public class Stack<E> extends Vector<E> {
boolean empty()
E peek()
E pop()
E push(E item)
int search(Object o)
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Stack 已经不被官方推荐使用
- Stack 继承 Vector,Vector 属于早期的集合产物,效率较低,现在已经不再推荐使用
- Stack 和 Vector 的关系设计的非常糟糕,不应是继承关系,而应该是组合关系
- Vector 属于动态数组,有能力在数组的任何位置添加/删除元素,Stack 继承了 Vector 因此也有这样的能力
- Stack 的 Iterator 甚至是按照数组的方式来遍历 Stack
面向接口编程
- 对比 Stack 设计,Queue 接口的设计更加合理
- 无论 Queue 接口如何实现,对外暴露的方法始终不变
Queue<Integer> q1 = new LinkedList<>()
;Queue<Integer> q2 = new ArrayQueue<>()
;
官方推荐实现
- 使用 Deque 双端队列接口
Deque<Integer> srack = new ArrayDeque<>()
- 仍然不完美:Deque 是双端队列接口,可以在两端同时插入删除,仍然不符合 Stack 严格定义